<?php
	ini_set('display_errors', true);
    require_once(dirname(__FILE__) . "/../controllers/calciatore.php");
	require_once(dirname(__FILE__) . "/../controllers/calendari.php");
	require_once(dirname(__FILE__) . "/../controllers/formazione.php");
	require_once(dirname(__FILE__) . "/../controllers/squadra.php");
	require_once(dirname(__FILE__) . "/../controllers/user.php");
	require_once(dirname(__FILE__) . "/../controllers/lega.php");
	require_once(dirname(__FILE__) . "/../model/db_driver.php");
	session_start();
	$txtLog = "";
	if(User::getCurrentUser()==null || User::getCurrentUser()->getRuolo()<User::$ADMIN){
		echo "Errore: devi essere un amministratore per visualizzare questa pagina.<br />";
		die();
	}
	/* Controlla se è stata fatta una richista POST */
	if(isset($_REQUEST['btnCalcola'])){
	/* Richiesta POST */
		$giornata = $_REQUEST['cmbGiornate'];
		try{
			//caricaRisultati($giornata); //legge il file dei risultati e li carica sul DB.
			//echo "<div style='color:blue;'>Voti caricati con successo nel DB:</div>";
			$leghe = Lega::caricaLeghe();
			foreach($leghe as $l){
				if(!$l->isAttiva()) continue;
				$txtLog = $txtLog . calcolaRisultati($giornata, $l);
			} 
		}catch(Exception $ex){
			$txtLog = "<div style='color:red;'>Errore: <br />$ex</div>";
		}
		echo $txtLog;
	}else{
		/* Codice della pagina */
		$script = '
			<script type="text/javascript" language="javascript">

			</script>
		';
		$html = $script . "
				<p class='adminTitle'>
					Calcola risultati
				</p>
				<table style='width:100%'>
					<tr>
						<td style='width:300px;'>Seleziona la giornata di seria A:</td>
						<td style='text-align:left;'>
							" . comboGiornate() . "
						</td>
					</tr>
					<tr>
						<td colspan='2'>
							<input type='submit' name='btnCalcola' value='Calcola risultati' onclick='calcolaRisultati()'/> <!--  -->
						</td>
					</tr>
					<tr>
						<td colspan='2'>
							<div id='dvRisultati'>
								&nbsp;
							</div>
						</td>
					</tr>
				</table>
			<!--</form> -->
		";
		
		echo $html;
	}
	
	$log = "";

	
	function comboGiornate(){
		$succGiornata = Calendario::getNextADay(); //giornata successiva di campionato per al quale non è stato calcolato alcun risultato
		$giornate="";
		for($i=1; $i < 39; $i ++){
			$sel = $i==$succGiornata ? "selected='selected'" : "" ;
			$giornate = $giornate . "<option value='$i' $sel >$i</option>\n";
		}
		return "
			<select name='cmbGiornate' id='cmbGiornate'>
				$giornate
			</select>";
		
	}
	function calcolaRisultati($giornataA, $lega){
		global $log;
	/* Calcola i risultati per questa giornata di serie A */
		$db = new DbDriver();
		$calendario = Calendario::caricaCalendarioGiornata($giornataA, $lega->getLegaId());
		if($calendario->getNumGiornate()==0) return;
		$voti = VotoCalciatore::caricaVoti($giornataA);
		$log = "
		<link rel='stylesheet' href='dettagli_partite/dettagli.css' type='text/css'/>
		<div style='color:blue; font-size:14px'>Risultati per la lega: " . $lega->getNome() . "</div>
		<div>Voti della $giornataA giornata di seria A</div>";

		$gen_log = $log;
		for($g=0;$g<$calendario->getNumGiornate();$g++){
			$log = $log . "<div>Lega: " . $calendario->getGiornata($g)->getLega()->getNome() . " - Stagione: " . $calendario->getGiornata($g)->getLega()->getStagione()   
			. "<br />" . $calendario->getGiornata($g)->getGiornata() . " giornata di " . $calendario->getGiornata($g)->getCompetizione() ."</div>
			<table border='0' cellpadding='0' cellspacing='0'>
			<tr><td>";
			
			for($i=0; $i < $calendario->getGiornata($g)->getNumScontri(); $i++){
				$scontro = $calendario->getGiornata($g)->getScontro($i);
				$log = $log . "
				<!-- inizio tabella scontri -->
				<table border='0' cellpadding='0' cellspacing='0'>
				<tr>
					<td colspan='2'>
						<div class='scontro'>Scontro " . ($i+1) . ": " . $scontro->getSquadraCasa() . " vs " . $scontro->getSquadraOspite() . "</div>
					</td>
				</tr>
				<tr>
					<td>";
				//calcola il voto della squadra di casa
				$idSquadra = $scontro->getIdCasa();
				$formazione = caricaFormazioneRisultati($idSquadra, $giornataA);
				$miglior_formazione = Squadra::caricaMigliorFormazione($idSquadra, $giornataA);
				$scontro->setVotoCasa(calcolaVotoSquadra($formazione, $voti));
				$log = $log . "
					</td>
					<td style='vertical-align:top;padding-left:15px;'>
						<br />
						<div>Miglior formazione</div>
						";
				$log = print_best_players($log, $miglior_formazione);
				$log = $log . "
					</td>
				</tr>
				<tr>
					<td style='vertical-align:top;'>";
				//calcola il voto della squadra ospite
				$idSquadra = $scontro->getIdOspite();
				$formazione = caricaFormazioneRisultati($idSquadra, $giornataA);
				$scontro->setVotoOspite(calcolaVotoSquadra($formazione, $voti));
				$log = $log . "
					</td>
					<td style='vertical-align:top;padding-left:15px;'>
						<br />
						<div>Miglior formazione</div>
						";
				$miglior_formazione = Squadra::caricaMigliorFormazione($idSquadra, $giornataA);
				$log = print_best_players($log, $miglior_formazione);
				$log = $log . "
					</td>
				</tr>";
				$log = $log . sprintf("<tr><td colspan='2' style='text-align:left;'><br /><div class='risultatoScontro'>risultato: %s %d | %s %d</div></td></td>", 
				$scontro->getSquadraCasa(), $scontro->getGolCasa(), $scontro->getSquadraOspite(), $scontro->getGolOspite());
				$log = $log . "
				</table>";
			}
			$log = $log . "</td></tr></table>";
			$calendario->getGiornata($g)->salva($log); //salva i risultati sul DB
			$gen_log = "<div><br /><br /><br /></div>" . $log;
		}
		/*aggiorna la classifica*/
		$db->db_aggiornaClassifica($lega->getCompetizione(), $lega->getLegaId());
		echo "classifica aggiornata per la lega: " . $lega->getLegaId() . " di tipo " . $lega->getCompetizione();
		/* scrive il log sulla pagina */
		return $log;
	}
	
	function print_best_players($log, $best_players){
		$totale = 0;
		$log = $log . "<table border='0' cellpadding='0' cellspacing='0'>
		<tr>
			<td class='headerResult' >Ruolo</td>
			<td class='headerResult' >Giocatore</td>
			<td class='headerResult' >FV</td>
		</tr>";
		foreach($best_players as $g){
			if($g == null) continue;
			$log = $log . sprintf("<tr>
				<td class='rowResult'>%s</td>
				<td class='rowResult' style='white-space:nowrap;'  >%s</td>
				<td class='rowResult' >%s</td>
			</tr>
			", $g->getRuolo(),$g->getNome(), $g->getFV());
			$totale += $g->getFV();
		}
		
		$log = $log . "
		<tr>
			<td colspan='3' class='rowTotale'>Totale: $totale</td>
		</tr>
		</table>";
		return $log;
	}
	
	function calcolaVotoSquadra($formazione, $voti){
	/* Calcola il voto totale per questa formazione:
	 * parametri:
	 * - $formazione: formazione della giornata corrente (istanza della classe Formazione)
	 * - $voti: array di oggetti VotoCalciatore
	 * - $log: log sul quale scrivere i dettagli di ogni giocatore */
		global $log;
		$log = $log . "
		<table cellpadding='0' cellspacing='0' border='0'>
			<tr><td colspan='13'>&nbsp;</td></tr>
			<tr><td colspan='13'><div class='titoloPagella'>Pagella " . $formazione->getSquadra() . "</div></td></tr>";
		$log = $log . VotoCalciatore::getHeaderHTML();
		$votoSquadra = 0;
		$calciatore;
		//calcola il voto del portiere
		$votoSquadra = getVotoPortiere($voti, $formazione);
		$votoSquadra += getVotoReparto($voti, $formazione, "D");
		$votoSquadra += getVotoReparto($voti, $formazione, "C");
		$votoSquadra += getVotoReparto($voti, $formazione, "A");
		$log = $log . "
		<tr><td class='rowTotale'>&nbsp;</td>
			<td class='rowTotale'>TOTALE</td>
			<td  class='rowTotale' colspan='2'> $votoSquadra</td><td  class='rowTotale' colspan='9'>&nbsp;</td>
		</tr>
		</table>";
		return $votoSquadra;
	}
	
	function getVotoPortiere($voti, $formazione){
	/* Calcola il voto del portiere. Se il portiere titolare non viene trovato prende la prima riserva */
		global $log;
		$calciatore = getVotoCalciatore($voti, $formazione->getPortiere(Formazione::$TITOLARE)->getId());
		if($calciatore == null || $calciatore->voto=="6*") {
			//se il giocatore non ha voto ne mette uno vuoto
			$calciatore = new VotoCalciatore(null);
			$calciatore->nome = $formazione->getPortiere(Formazione::$TITOLARE)->getNome();
			$calciatore->ruolo = "P";
			$calciatore->voto = "-";
			$log = $log . $calciatore->serializeHTML();
			$calciatore = null;
			$calciatore = getVotoCalciatore($voti, $formazione->getPortiere(Formazione::$RISERVA_1)->getId());
			if($calciatore == null){
			//se non c'è neanche la riserva mette vuota anche questa
				$calciatore = new VotoCalciatore(null);
				$calciatore->nome = $formazione->getPortiere(Formazione::$RISERVA_1)->getNome();
				$calciatore->ruolo = "P";
			}
			
		}
		$log = $log . $calciatore->serializeHTML();
		return $calciatore->getFantaVoto();
		
	}
	
	function getCalciatore($voti, $formazione, $posizione, $i, $ruolo){
	/* Parametri:
	 * $voti: array dei voti
	 * $formazione: oggetto Formazione della quale calcolare il voto
	 * $log: stringa sul quale scrivere i log
	 * $posizione: TITOLARE, RISERVA_1, RISERVA_2, ecc.
	 * $i: i-esimo giocatore in questa posizione (più che altro server quando $posizione=TITOLARE)
	 * $ruolo: ruolo in cui gioca il giocatore */
		global $log;
		$calciatore = null;
		$cf = null;
		if($ruolo == "P"){
			$cf = $formazione->getPortiere($posizione);
		}elseif($ruolo=="D"){
			$cf =  $formazione->getDifensorePos($posizione, $i);
		}elseif($ruolo=="C"){
			$cf = $formazione->getCentrocampistaPos($posizione, $i);
		}elseif($ruolo=="A"){
			$cf = $formazione->getAttaccantePos($posizione, $i);
		}
		//controlla se ha trovato il giocatore nella posizione specificata
		if($cf != null){
			$calciatore = getVotoCalciatore($voti, $cf->getId());
			if($calciatore == null) {
				$calciatore = new VotoCalciatore(null);
				$calciatore->nome = $cf->getNome();
				$calciatore->ruolo = $ruolo;
				$calciatore->voto = 0; //il giocatore non ha giocato
			}
			$log = $log . $calciatore->serializeHTML();
		}
		return $calciatore;
	}
	
	function getVotoCalciatore($voti, $id){
		foreach($voti as $c){
			if($c[3] == $id)
				return new VotoCalciatore($c);
		}
		return null;
	}
	
	function getVotoReparto($voti, $formazione, $ruolo){
		global $log;
		$num = 0;
		if($ruolo=="D"){
			$num = $formazione->getNumDifensoriInPos(Formazione::$TITOLARE);
		}elseif($ruolo=="C"){
			$num = $formazione->getNumCentrocampistiInPos(Formazione::$TITOLARE);	
		}elseif($ruolo == "A"){
			$num = $formazione->getNumAttaccantiInPos(Formazione::$TITOLARE);
		}
		
		$used_riserve=0;
		$c=null;
		$voto_reparto=0;
		for($i=0;$i<$num;$i++){
			$c = getCalciatore($voti, $formazione, Formazione::$TITOLARE, $i, $ruolo);
			//brutta questa parte. Da rifare appena possibile 
			if($c->voto=="6*" || $c->voto == 0 || $c->voto=="-"){
				if(++$used_riserve==1){
					$c = getCalciatore($voti, $formazione, Formazione::$RISERVA_1, 0, $ruolo);
				}
				if(($c == null || $c->voto=="6*" || $c->voto=="-" || $c->voto==0 ) && $used_riserve<=2){
					$c = getCalciatore($voti, $formazione, Formazione::$RISERVA_2, 0, $ruolo);
					$used_riserve++;
				}
			}
			if($c!=null){
				//echo "<div>calcolaRisultati::getVotoReparto() -> fanta voto del calciatore ". $c->nome ." = " . $c->getFantaVoto() . " </div>";
				$voto_reparto += $c->getFantaVoto();
			}
		}
		return $voto_reparto;
	}
	
?>
